<?php
class Doctrine {
	// the Doctrine entity manager
	public $em = null;
	
	public function __construct()
	{
		// include our CodeIgniter application's database configuration
		require APPPATH.'config/database.php';
		// include Doctrine's fancy ClassLoader class
		require_once APPPATH.'libraries/Doctrine/Common/ClassLoader.php';
	
		// load the Doctrine classes
		$doctrineClassLoader = new \Doctrine\Common\ClassLoader('Doctrine', APPPATH.'libraries');
		$doctrineClassLoader->register();
	
		// load Symfony2 helpers
		// Don't be alarmed, this is necessary for YAML mapping files
		$symfonyClassLoader = new \Doctrine\Common\ClassLoader('Symfony', APPPATH.'libraries/Doctrine');
		$symfonyClassLoader->register();
	
		// load the entities
		$entityClassLoader = new \Doctrine\Common\ClassLoader('Entities', APPPATH.'models');
		$entityClassLoader->register();
	
		// load the proxy entities
		$proxyClassLoader = new \Doctrine\Common\ClassLoader('Proxies', APPPATH.'models');
		$proxyClassLoader->register();
	
		// set up the configuration
		$config = new \Doctrine\ORM\Configuration;
	
		if(ENVIRONMENT == 'development')
			// set up simple array caching for development mode
			$cache = new \Doctrine\Common\Cache\ArrayCache;
		else
			// set up caching with APC for production mode
			$cache = new \Doctrine\Common\Cache\ApcCache;
		$config->setMetadataCacheImpl($cache);
		$config->setQueryCacheImpl($cache);
	
		// set up proxy configuration
		$config->setProxyDir(APPPATH.'models/Proxies');
		$config->setProxyNamespace('Proxies');
		
		// auto-generate proxy classes if we are in development mode
		$config->setAutoGenerateProxyClasses(ENVIRONMENT == 'development');
	
		// set up annotation driver
		//$yamlDriver = new \Doctrine\ORM\Mapping\Driver\YamlDriver(APPPATH.'models/Mappings');
		$driverImpl = $config->newDefaultAnnotationDriver(APPPATH.'models');
		$config->setMetadataDriverImpl($driverImpl);
		/*$yamlDriver = new \Doctrine\ORM\Mapping\Driver\YamlDriver(APPPATH.'models/Mappings');
        $config->setMetadataDriverImpl($yamlDriver);*/
	
		// Database connection information
		$connectionOptions = array(
				'driver' => 'pdo_mysql',
				'user' => $db['default']['username'],
				'password' => $db['default']['password'],
				'host' => $db['default']['hostname'],
				'dbname' => $db['default']['database'],
				'charset' => $db['default']['char_set']
			);

	
		// create the EntityManager
		$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
	
		// store it as a member, for use in our CodeIgniter controllers.
		$this->em = $em;
	}
}